// export class router {
//     route = {};
//     active_path = '';
//     constructor(ctx) {
//         ctx.router = this;
//         this.setPath(this.getPage().route);

//     }
//     push(config) {
//         const url = config.url + this.toURL(config.parmas || {});
//         const success = config.success || (() => { });
//         const fail = config.fail || (() => { });
//         const type = config.way || 'navigateTo';
//         const jumpMethod = wx[type];
//         if (!jumpMethod) return;
//         const next = () => {
//             jumpMethod({
//                 url,
//                 success: (res) => {
//                     success(res);
//                     this.setPath(this.getPage().route);
//                 },
//                 fail,
//             })
//         }
//         if (this.beforRouterEach) {
//             const from = this.getPage().route;
//             this.beforRouterEach(url, from, next)
//         } else {
//             next();
//         }
//     }
//     back({ delta, data }) {
//         wx.navigateBack({
//             delta,
//             success: () => {
//                 this.getPage().setData(data);
//             }
//         });

//     }
//     toURL(data) {
//         const isObj = (val) => (val && Object.prototype.toString.call(val)) === "[object Object]";
//         if (!isObj(data)) return '';
//         if (Object.keys(data).length == 0) return '';
//         let string = '?';
//         for (let key in data) {
//             string += `${key}=${data[key]}&`;
//         }
//         return string.slice(0, string.length - 1)
//     }
//     getPage() {
//         return getCurrentPages().pop();
//     };
//     setPath(path) {
//         this.active_path = path;
//     }

// }
// 在 app.js import 这个文件就行, 或把此代码放在onLaunch就可, 
(function (wx) {
    const methodsMap = {
        navigateTo: wx.navigateTo,
        redirectTo: wx.redirectTo,
        reLaunch: wx.reLaunch,
        switchTab: wx.switchTab,
    };
    let callback = null;
    const createRouter = (method) => (config) => {
        config.url += config.data ? toURL(config.data) : '';
        const next = () => methodsMap[method].call(wx, config);
        callback ? callback(config.url, getCurrentPages().pop(), next) : next();
    }
    // js  转  url参数
    const toURL = (data) => {
        const isObj = (val) => (val && Object.prototype.toString.call(val)) === "[object Object]";
        if (!isObj(data)) return '';
        if (Object.keys(data).length == 0) return '';
        let string = '?';
        for (let key in data) {
            string += `${key}=${data[key]}&`;
        }
        return string.slice(0, string.length - 1)
    };
    // 处理用户添加的路由守卫回调
    const beforRouterEach = (fn) => {
        if (Object.prototype.toString.call(fn) === "[object Function]")
            callback = fn
    }
    wx.navigateTo1 = createRouter('navigateTo')
    wx.redirectTo1 = createRouter('redirectTo')
    wx.reLaunch1 = createRouter('reLaunch')
    wx.switchTab1 = createRouter('switchTab')
    wx.beforRouterEach = beforRouterEach;
})(wx)
// 测试 路由守卫
wx.beforRouterEach((to, from, next) => {
    console.log('%c 🍑 to: ', 'font-size:20px;background-color: #ED9EC7;color:#fff;', to);
    console.log('%c 🥫 from: ', 'font-size:20px;background-color: #B03734;color:#fff;', from);
    next()
})